# 1、列表(list):有序项目的数据结构，可存放任意类型
# 索引：通过下标访问列表中的元素，下标从0开始（下标不能越界）
# lst=[1,2,3,4,5,67,7,8]
# print(lst[0])

# 切片：通过下标访问呢列表中的元素，切片可以取出个子列表
# lst=['abc','b',1,'123','n','e',5,7,4]
# print(lst[1:8:1])
#切片对象(slice函数)
# lst=['abc','b',1,'123','n','e',5,7,4]
# s1=slice(0,3,1)
# print(lst[s1])
# 增加：append每次在末尾，作为整体追加，增加一个元素，
#     insert: 在指定位置插入元素
#     extend:  扩展列表（加可迭代对象，每个值分隔开在加进去
#     lst1+lst2：拼接成一个新的列表
# lst=['abc','b',1,'123','n','e',5,7,4]
# lst.append("mm")
# print(lst)
# lst.insert(2,"yy")
# print(lst)
# lst.extend(["1","2","3"])
# print(lst)
# 删除：pop： 删除元素，默认最后一个（指定index删除）remove_item定义被删除的元素  。pop()可指定删除
#     remove：指定元素删除，如果有相同元素，只删除第一个，没有匹配元素，会报错
#     -del：关键字删除（通过下标切片可以找到的，都可以删除，删除掉引用）
#     clear：清空列表
# lst=['abc','b',1,'123','n','e',5,7,4]
# lst.pop()
# print(lst)
# remove_item=lst.pop()
# print(remove_item)
# lst.pop(1)
# print(lst)
# lst.remove("n")
# print(lst)
# del lst[0]
# print(lst)
# lst.clear()
# print(lst)
# 修改：（修改元素主要是利用下标和切片来修改或增加、删除）
#     通过下标和切片来进行增加、修改）
#     （ 增加：当切出来的列表为空时，就在start位置开始插入相应的list值；当切出来列表不为空时，就替换查找出来的lst元素，都需要接收一个可迭代对象）
# lst=['abc','b',1,'123','n','e',5,7,4]
# print(lst[1:1])
# lst[1:1]='xyz'
# print(lst)
# print(lst[1:6])
# lst[1:6]='mn'
# print(lst)
# 反转 ： 反转列表-reverse 或负切片
# lst = ['abc', 'b', 1, '123', 'n', 'e', 5, 7, 4]
# lst.reverse()
# print(lst)
# #排序sort：只能同类型比较（默认升序，降序需要指定reverse反向排序）字符串会按第一个字符的编码来排序---查编码用ord
# lst=[317,43,6,2,8,32,2344]
# lst.sort()
# print(lst)
# 统计：count统计元素出现的次数
#     index：查看他的下标位置
#     len：查看长度
# lst=['a','a','f','e','g']
# print(lst.count("a"))
# print(lst.index("a"))
# print(len(lst))
# 遍历依次取出对象中的每一项数据• list是一个可迭代对象（iterable），可以直接用for遍历
# lst=['abc', 'b', 1, '123', 'n', 'e', 5, 7, 4]
# for i in lst:
#     print(i)
# 2、元组tuple通过圆括号中用逗号分割的项目定义
#     索引通过下标访问列表中的元素，下标从0开始计数，可取出一个元素
#     切片：切片是通过下标访问元组中的元素，切片可以取出一个子元组
# 元组和列表
    # 相同点：序列的两个主要特点是索引操作符和切片操作符
    # 索引操作符让我们可以从序列中抓取一个特定项目
    # 切片操作符让我们能够获取序列的一个切片，即一部分序列。
    # 不同点：list: 可变对象
    # tuple: 不可变对象，不能增加修改删除
    # tuple中嵌套list时，list是可修改的
# 3、字典dict：元组通过花括号中用键/值对用冒号分割，而各个对用逗号分割
# 字典的key必须为可哈希对象
# python中所有字符串、数字、元组、布尔值、None都是可hash对象
# 取值：dicts[key] => 当key不存在时，会引了KeyError错误
#     dicts.get(key, default) => 当key不存在时，返回default值
# a={"a":1,"b":2,"c":3,"d":2}
# print(a['b'])
# print(a.get("e",0))
# 新增：
# a={"a":1,"b":2,"c":3,"d":2}
# a['e']=6
# print(a)
# # 修改：
# a['b']=4
# print(a)
# 删除：dicts.pop(key)
#     dicts.popitem(）  （默认修改最后一个）
# 合并：dict1.update(dict2) => 将dic1合并到dict1（直接改变原字典）
#     dict(dict1,**dict2) => 将dict1与dict2合并生成一个新字典
# 遍历：
# 4、集合set：只含有key的字典
# 增加：s.add(item) => 添加一项
#     s.update(someitems) => 添加
# s={1,2,3}
# s.add(4)
# print(s)
# s.update([10,37,42])
# print(s)
# 删除：s.remove(item) => 移除一项(item不存在会出错KeyError)
#     s.discard(item) => 移除一项(item不存在则什么也不做
# s={1,2,3,4,10,37,42}
# s.remove(4)
# print(s)
# s.discard(10)
# print(s)





#######python中哪些是可变数据类型，哪些是不可变数据类型，为什么
# 整型	不可变 当数据发生改变后，变量的内存地址发生了改变，
# 字符串	不可变 当数据发生改变后，变量的内存地址发生了改变，
# 元组	不可变 元组被称为只读列表，即数据可以被查询，但不能被修改
# 列表	可变 虽然列表数据发生改变，但是内存地址没有发生了改变，
# 集合	可变 虽然集合数据发生改变，但是内存地址没有发生了改变
# 字典	可变 ，虽然字典数据发生改变，但是内存地址没有发生了改变，